// pages/login/login.js
import config from '../../config/api'
const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    phone: '',
    password: '',
    focusedInput: '',
    showWechatLogin: true, // true表示显示微信登录，false表示显示账号密码登录
    phoneNumber: ''
  },

  /**
   * 切换到账号密码登录
   */
  switchToPasswordLogin() {
    this.setData({
      showWechatLogin: false
    });
  },

  /**
   * 切换到微信登录
   */
  switchToWechatLogin() {
    this.setData({
      showWechatLogin: true
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  onInputFocus(e) {
    this.setData({
      focusedInput: e.currentTarget.dataset.field
    });
  },

  onInputBlur() {
    this.setData({
      focusedInput: ''
    });
  },

  onPhoneInput(e) {
    this.setData({
      phone: e.detail.value
    })
  },

  onPasswordInput(e) {
    this.setData({
      password: e.detail.value
    })
  },

  validateForm() {
    const { phone, password } = this.data

    if (!phone.trim() || !/^1[3-9]\d{9}$/.test(phone)) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none'
      })
      return false
    }

    if (!password || password.length < 6) {
      wx.showToast({
        title: '密码至少6位',
        icon: 'none'
      })
      return false
    }

    return true
  },

  handleLogin() {
    if (!this.validateForm()) return;

    const { phone, password } = this.data;

    wx.showLoading({
      title: '登录中...'
    });

    wx.request({
      url: `${config.baseUrl}${config.api.login}`,
      method: 'POST',
      data: {
        phone,
        password
      },
      success: (res) => {
        wx.hideLoading();
        if (res.data.code === 200) {
          console.log(res.data.data);
          // 保存用户信息和token
          const { token, user } = res.data.data;

          // 保存到全局数据
          getApp().globalData.userInfo = user;
          getApp().globalData.hasUserInfo = true;
          getApp().globalData.token = token;

          // 保存到本地存储
          wx.setStorageSync('token', token);
          wx.setStorageSync('userInfo', user);
          wx.setStorageSync('userId', user.id);
          wx.setStorageSync('username', user.username);
          wx.setStorageSync('avatar', user.avatar);
          wx.setStorageSync('phone', user.phone);
          wx.setStorageSync('nickname', user.nickname);
          wx.setStorageSync('gender', user.gender);
          wx.setStorageSync('birthday', user.birthday);

          wx.showToast({
            title: '登录成功',
            icon: 'success',
            duration: 1500,
            success: () => {
              setTimeout(() => {
                wx.switchTab({
                  url: '/pages/profile/profile'
                });
              }, 1500);
            }
          });
        } else {
          wx.showToast({
            title: res.data.message || '登录失败',
            icon: 'none'
          });
        }
      },
      fail: () => {
        wx.hideLoading();
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 获取微信用户的code并进行登录
  getWxLoginCode() {
    return new Promise((resolve, reject) => {
      wx.login({
        success: (res) => {
          if (res.code) {
            resolve(res.code);
          } else {
            reject(new Error('获取code失败'));
          }
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
  },

  // 处理微信手机号授权
  getPhoneNumber(e) {
    // 用户拒绝授权
    if (e.detail.errMsg === 'getPhoneNumber:fail user deny') {
      wx.showToast({
        title: '请授权手机号以完成登录',
        icon: 'none'
      });
      return;
    }
    wx.showLoading({
      title: '登录中...',
    });

    // 先获取微信登录code
    this.getWxLoginCode().then(code => {
      // 调用微信登录接口
      wx.request({
        url: `${config.baseUrl}${config.api.wxPhoneLogin}`,
        method: 'POST',
        header: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        data: {
          code: e.detail.code
        },
        success: (res) => {
          if (res.data.code === 200) {
            const { phoneNumber } = res.data.data;
            this.setData({
              phoneNumber: phoneNumber
            });
            this.getWxLoginCode().then(code => {
              this.loginWithCode(code);
            });
          } else {
            wx.hideLoading();
            wx.showToast({
              title: res.data.message || '登录失败',
              icon: 'none'
            });
          }
        },
        fail: (err) => {
          wx.hideLoading();
          console.error('微信登录请求失败', err);
          wx.showToast({
            title: '网络错误，请重试',
            icon: 'none'
          });
        }
      });
    }).catch(err => {
      wx.hideLoading();
      console.error('获取微信code失败', err);
      wx.showToast({
        title: '登录失败，请重试',
        icon: 'none'
      });
    });
  },

  // 更新用户手机号
  updateUserPhone(phoneNumber, iv, token) {
    wx.request({
      url: `${config.baseUrl}${config.api.userProfile}?userId=${wx.getStorageSync('userInfo').id}&phone=${phoneNumber}`,
      method: 'PUT',
      header: {
        'Content-Type': 'application/json',
      },
      data: {
        phone: phoneNumber,
        userId: wx.getStorageSync('userInfo').id
      },
      success: (res) => {
        console.log(res.data, '更新手机号成功');
        if (res.data.code === 200) {
          // 更新本地保存的用户信息
          const updatedUser = { ...getApp().globalData.userInfo, ...res.data.data };
          getApp().globalData.userInfo = updatedUser;
          wx.setStorageSync('userInfo', updatedUser);
          this.loginSuccess()
        }
      },
      fail: (err) => {
        console.error('更新手机号失败', err);
        // 即使更新手机号失败，也继续登录流程
        this.loginSuccess();
      }
    });
  },

  // 用code登录
  loginWithCode(code) {
    wx.request({
      url: `${config.baseUrl}${config.api.wxLogin}`,
      method: 'POST',
      header: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      data: {
        code: code
      },
      success: (res) => {
        if (res.data.code === 200) {
          console.log(res, '登录成功');

          const { token, user } = res.data.data;
          console.log(token, user, '登录成功');

          this.saveUserInfo(token, user);
          this.updateUserPhone(this.data.phoneNumber);
        } else {
          wx.hideLoading();
          wx.showToast({
            title: res.data.message || '登录失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('登录请求失败', err);
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 保存用户信息
  saveUserInfo(token, user) {
    // 保存到全局数据
    getApp().globalData.userInfo = user;
    getApp().globalData.hasUserInfo = true;
    getApp().globalData.token = token;

    // 保存到本地存储
    wx.setStorageSync('token', token);
    wx.setStorageSync('userInfo', user);
    wx.setStorageSync('userId', user.id);
    if (user.username) wx.setStorageSync('username', user.username);
    if (user.avatar) wx.setStorageSync('avatar', user.avatar);
    if (user.phone) wx.setStorageSync('phone', user.phone);
    if (user.nickname) wx.setStorageSync('nickname', user.nickname);
    if (user.gender) wx.setStorageSync('gender', user.gender);
    if (user.birthday) wx.setStorageSync('birthday', user.birthday);
  },

  // 登录成功后的处理
  loginSuccess() {
    wx.hideLoading();
    wx.showToast({
      title: '登录成功',
      icon: 'success',
      duration: 1500,
      success: () => {
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/profile/profile'
          });
        }, 1500);
      }
    });
  },

  // 保留原有的微信登录方法
  handleWechatLogin() {
    // 现在直接调用getPhoneNumber的授权流程
    this.getPhoneNumber({ detail: { errMsg: '主动触发授权' } });
  },

  goToRegister() {
    wx.navigateTo({
      url: '/pages/register/register'
    })
  },

  goToResetPassword() {
    wx.showToast({
      title: '功能开发中',
      icon: 'none'
    })
  }
})